//路由鉴权：鉴权，项目当中路由能不能被访问的权限的设置（某一个路由什么条件下可以访问，什么条件下不可以访问）
import router from '@/router'

//引入进度条样式（路径正确无需修改）
import 'nprogress/nprogress.css'
import NProgress from 'nprogress'
NProgress.configure({ showSpinner: false })
//获取用户相关的小仓库内部token数据，去判断用户是否登录成功
import useUserStore from '@/store/modules/user'
import pinia from './store'


const userStore = useUserStore(pinia)


//全局守卫：项目当中任意路由切换都会触发的钩子
//全局前置守卫：在路由切换之前触发
router.beforeEach(async(to:any,_from:any,next:any)=>{
    const username=userStore.username
    document.title=to.meta.title
    
    //访问某个路由之前守卫
    NProgress.start()
    if(userStore.token){
        //登录成功，访问login
        if(to.path=='/login'){
            next({path:'/'}) 
        }else{
            //如果没有用户名，发送请求获取用户信息
            if(username){
                next()
            }else{
                try{
                    await userStore.userInfo()
                    next({...to})
                }catch(error){
                    //token过期，获取不到用户信息
                    //用户手动修改本地存储token
                    //退出登录->用户相关的数据清空
                    console.log(error);
                    
                    userStore.userLogOut()
                    if(to.path=='/login')
                    {
                        next()
                    }
                    else{
                        
                            next({path:'/login',query:{redirect:to.path}}) 
                        
                    }
                }
                
            }
        }
        
    }else{
        //未登录：不能访问login，指向首页
        if(to.path=='/login'){
            next() 
        }else{
            //未登录：不能访问其余路由，指向login
            next({path:'/login',query:{redirect:to.path}})
        }
    }
})
//全局后置守卫：在路由切换之后触发
router.afterEach((_to:any,_from:any)=>{
    NProgress.done()
})